package com.kingyun.gpsinspection.purificationservice.facade.service.jsm.entity;

import com.kingyun.gpsinspection.purificationservice.facade.model.jsm.*;

import java.util.List;
import java.util.Map;

/**
 * Created by YuPeng on 2016/12/5.
 */
public interface JsmEntityService {
    /**
     * 获取生产实体树，用户登录
     * @param isOrg  判断是否为组织
     * @param orgId
     * @throws Exception
     */
    List<Ztree> getEntityTree(String isOrg, String orgId, Employee employee) throws Exception;

    /**
     * 获取生产实体树带设备特性
     *
     * @param isOrg
     * @param id
     * @return
     * @throws Exception
     */
    List<Ztree> getEntityTreeWithPro(String isOrg, String id) throws Exception;

    /**
     * 添加生产实体
     *
     * @param entity
     * @return
     * @throws Exception
     */
    Map<String, Object> addEntity(Entity entity, List<EntityPro> entityPros, String uploadFiles, String deletedFiles, Employee employee) throws Exception;

    /**
     * 删除实体
     *
     * @param id
     * @return
     * @throws Exception
     */
    boolean delEntityById(String id) throws Exception;

    /**
     * 修改生产实体
     *
     * @param entity
     * @return
     * @throws Exception
     */
    Map<String, Object> modifyEntity(Entity entity, List<EntityPro> entityPros, String uploadFiles, String deletedFiles, Employee employee) throws Exception;

    /**
     * 获取实体详情
     *
     * @param id
     * @return
     * @throws Exception
     */
    EntityVo getEntityById(String id) throws Exception;

    /**
     * 搜索生产实体
     *
     * @param entity
     * @return
     * @throws Exception
     */
    List<EntityVo> searchEntity(Entity entity) throws Exception;

    /**
     * 获取生产厂商
     *
     * @return
     * @throws Exception
     */
    List<ManufactorVo> getManufactor() throws Exception;

    /**
     * 工作内容表获取生产实体相应数据
     * zml
     *
     * @param entityId
     * @return
     * @throws Exception
     */
    EntityVo findEntity(String entityId) throws Exception;

    /**
     * 获取实体所属中心井站的orgId
     *
     * @param enId
     * @return
     * @throws Exception
     */
    String getPOId(String enId) throws Exception;


    /**
     * 得到某个生产实体类型的特性值
     * @param entityTypeId
     * @return
     */
    List<EntityTypeProperty> getFeaturesByEntityTypeId(String entityTypeId);


    /**
     * 得到实体对应的特性
     * @param entityId
     * @return
     */
    List<EntityPro> getEntityProByEntityId(String entityId);


    /**
     * 分页查询
     * @param entityVO
     * @return
     */
    Map<String,Object> findByPage(EntityVo entityVO);


    /**
     * 批量删除实体
     * @param entityIds
     * @return
     * @throws Exception
     */
    int delBatch(List<String> entityIds) throws Exception;

    /**
     * 获取生产实体特性值树，根据组织id
     * @param orgId
     * @return
     * @throws Exception
     */
    List<EntityVo> getEntityPorperties(String orgId);

    /**
     * @param employee 人员信息组合
     * @param isOrg 是否组织
     * @param orgId 组织机构Id
     * @param keyword 搜索值
     */
    List<Ztree> getEntityZtreeByEmployee(Employee employee, String isOrg, String orgId, String keyword) throws Exception ;


    /**
     * 获取指定组织下的所有后代组织、后代生产实体的混合树
     * @param orgId
     * @return
     */
    List<Ztree> getOrgEntityMixedZtreeByOrgId(String orgId) throws Exception ;

    /**
     * 只获取组织下的实体或则实体下的实体，不获取组织下的组织
     * @param isOrg 1是组织 id 是组织Id
     * @param id
     * @return
     * @throws Exception
     */
    List<Ztree> getEntityTreeById(String isOrg, String id) throws Exception ;

    /**
     * 组织和生产实体混合树混合树的设置组织的ztree的isParent
     * @param ztree
     * @param orgId
     * @throws Exception
     */
    void setOrgZtreeIsParent(Ztree ztree, String orgId) throws Exception;

    /**
     * 组织和生产实体混合树混合树的设置生产实体的ztree的isParent
     * @param ztree
     * @param orgId
     * @throws Exception
     */
    void setEntityZtreeIsParent(Ztree ztree, String orgId) throws Exception;

    /**
     * @param nodeId 实体Id , 组织机构Id {除开井站 或者 分公司 或者 其他组织机构}
     * @param iconSkin
     * @throws Exception
     */
    List<Ztree> getEntityTypeByEntity(String nodeId, String iconSkin) throws Exception ;


    /**
     * 得到数据单元的特性值
     * @param entityPro
     * @return
     */
    Map<String,Object> getEntityProByDataItemId(EntityPro entityPro);


    /**
     * 解除绑定特性的汇报点
     * @param devicePropertyId
     * @return
     */
    Map<String,Object> unBindDataItem(String devicePropertyId) throws Exception;


    /**
     * 删除实体特性
     * @param devicePropertyId
     * @return
     * @throws Exception
     */
    Map<String,Object> delEnProperty(String devicePropertyId) throws  Exception;


    /**
     * 得到还没有被场站或者井站绑定的实体特性
     * @param entityPro
     * @return
     */
    Map<String,Object> getEntityTypePropertyWithoutOrgBind(EntityPro entityPro);



}
